﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using SIIE_ERP.Codigo.Configuracion;
using System.Data;
using SIIE_ERP.BaseDatos.Compras.Catalogos;
using SIIE_ERP.BaseDatos.CapitalHumano.Catalogos;
using SIIE_ERP.BaseDatos.Bancos.Catalogos;
using SIIE_ERP.BaseDatos;

namespace Elysium.Demo.Configuracion
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class CargaDatos_Proveedor3 : UserControl
    {
        private UsuarioActivo _sesion;
        private List<CargaDatos_Proveedor> _datos = new List<CargaDatos_Proveedor>();

        public CargaDatos_Proveedor3(ref UsuarioActivo usuario, ref DataTable Datos)
        {
            InitializeComponent();
            this._sesion = usuario;

            for (int i = 0; i < Datos.Rows.Count; i++)
            {
                CargaDatos_Proveedor AuxCarga = new CargaDatos_Proveedor();
                AuxCarga.RazonSocial_Prov = Datos.Rows[i]["RazonSocial_Prov"].ToString();
                AuxCarga.RFC_Prov = Datos.Rows[i]["RFC_Prov"].ToString();
                AuxCarga.NombreComercial_Prov = Datos.Rows[i]["NombreComercial_Prov"].ToString();
                AuxCarga.Grupo_Prov = Datos.Rows[i]["Grupo_Prov"].ToString();
                AuxCarga.Dir_Prov_Calle = Datos.Rows[i]["Dir_Prov_Calle"].ToString();
                AuxCarga.Dir_Prov_NumExt = Datos.Rows[i]["Dir_Prov_NumExt"].ToString();
                AuxCarga.Dir_Prov_NumInt = Datos.Rows[i]["Dir_Prov_NumInt"].ToString();
                AuxCarga.Dir_Prov_EntreCalle1 = Datos.Rows[i]["Dir_Prov_EntreCalle1"].ToString();
                AuxCarga.IsValid = Boolean.Parse(Datos.Rows[i]["IsValid"].ToString());
                AuxCarga.Dir_Prov_EntreCalle2 = Datos.Rows[i]["Dir_Prov_EntreCalle2"].ToString();
                AuxCarga.Dir_Prov_Colonia = Datos.Rows[i]["Dir_Prov_Colonia"].ToString();
                AuxCarga.Dir_Prov_Referencia = Datos.Rows[i]["Dir_Prov_Referencia"].ToString();
                AuxCarga.Dir_Prov_Poblacion = Datos.Rows[i]["Dir_Prov_Poblacion"].ToString();
                AuxCarga.Dir_Prov_CP = Datos.Rows[i]["Dir_Prov_CP"].ToString();
                AuxCarga.Dir_Prov_Pais = Datos.Rows[i]["Dir_Prov_Pais"].ToString();
                AuxCarga.Dir_Prov_Estado = Datos.Rows[i]["Dir_Prov_Estado"].ToString();
                AuxCarga.Dir_Prov_Delegacion = Datos.Rows[i]["Dir_Prov_Delegacion"].ToString();

                if (AuxCarga.IsValid)
                    _datos.Add(AuxCarga);

                DatosDataGrid.Items.Add(AuxCarga);
            }
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("CargaDatos.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void ButtonRegresar_Click_1(object sender, RoutedEventArgs e)
        {
            ((ScrollViewer)this.Parent).Content = new CargaDatos_Main(ref _sesion);
        }

        private void Button_Agregar_Click_1(object sender, RoutedEventArgs e)
        {
            dbo_Cat_Proveedor Cat_Proveedor = new dbo_Cat_Proveedor(_sesion.RFC, _sesion.UserName);
            dbo_Cat_Colaborador Cat_Colaborador = new dbo_Cat_Colaborador(_sesion.RFC, _sesion.UserName);
            dbo_Cat_Grupo_Proveedores Cat_Grupo_Proveedores = new dbo_Cat_Grupo_Proveedores(_sesion.RFC, _sesion.UserName);
            dbo_Cat_Terminos_Pago Cat_Terminos_Pago = new dbo_Cat_Terminos_Pago(_sesion.RFC, _sesion.UserName);
            dbo_Cat_Moneda Cat_Moneda = new dbo_Cat_Moneda(_sesion.RFC, _sesion.UserName);

            var dt_Cat_Grupo_Proveedores = Cat_Grupo_Proveedores.Get_Grupo_Proveedoreses().AsEnumerable();
            var dt_Cat_SIIE_Pais = dbo_Cat_SIIE.Get_Paises().AsEnumerable();
            var dt_Cat_SIIE_Estado = dbo_Cat_SIIE.Get_Estados().AsEnumerable();

            //Agregamos Grupos de Proveedores
            var query_1 =
                (from c in _datos
                 where !(from o in dt_Cat_Grupo_Proveedores
                         select o.Field<string>("Nombre"))
                        .Contains(c.Grupo_Prov)
                 select c)
                .GroupBy(p => p.Grupo_Prov)
                .Select(g => g.First());

            foreach (var c in query_1)
            {
                Cat_Grupo_Proveedores.Insert_Grupo_Proveedores(c.Grupo_Prov, c.Grupo_Prov);
            }
            dt_Cat_Grupo_Proveedores = Cat_Grupo_Proveedores.Get_Grupo_Proveedoreses().AsEnumerable();

            //Agregamos Paises
            var query_2 =
                (from c in _datos
                 where !(from o in dt_Cat_SIIE_Pais
                         select o.Field<string>("Nombre"))
                        .Contains(c.Dir_Prov_Pais)
                 select c)
                .GroupBy(p => p.Dir_Prov_Pais)
                .Select(g => g.First());

            foreach (var c in query_2)
            {
                dbo_Cat_SIIE.Insert_Pais(c.Dir_Prov_Pais);
            }
            dt_Cat_SIIE_Pais = dbo_Cat_SIIE.Get_Paises().AsEnumerable();

            //Agregamos Estados
            var query_3 =
                (from c in _datos
                 where !
                     (
                         (from o in dt_Cat_SIIE_Estado
                          select o.Field<string>("Desc_Pais"))
                             .Contains(c.Dir_Prov_Pais)
                        &&

                         (from o in dt_Cat_SIIE_Estado
                          select o.Field<string>("Nombre"))
                             .Contains(c.Dir_Prov_Estado)
                        )
                 select c)
                .GroupBy(p => new { p.Dir_Prov_Pais, p.Dir_Prov_Estado })
                .Select(g => g.First());

            foreach (var c in query_3)
            {
                dbo_Cat_SIIE.Insert_Estado
                (
                    c.Dir_Prov_Estado,
                    Int32.Parse(dbo_Cat_SIIE.Get_Paises_By_Nombre(c.Dir_Prov_Pais).Rows[0]["Id_SIIE_Pais"].ToString())
                );
            }
            dt_Cat_SIIE_Estado = dbo_Cat_SIIE.Get_Estados().AsEnumerable();

            foreach (CargaDatos_Proveedor c in _datos)
            {
                int Aux_Id_Pais = Int32.Parse(dbo_Cat_SIIE.Get_Paises_By_Nombre(c.Dir_Prov_Pais).Rows[0]["Id_SIIE_Pais"].ToString());

                Cat_Proveedor.Insert_Proveedor
                (
                    "0",
                    c.RazonSocial_Prov,
                    c.RFC_Prov,
                    c.NombreComercial_Prov,
                    Int32.Parse(Cat_Grupo_Proveedores.Get_Grupo_Proveedores_Por_Nombre(c.Grupo_Prov).Rows[0]["Id_GrupoProveedores"].ToString()),
                    Int32.Parse(Cat_Colaborador.Get_Colaboradores().Rows[0]["Id_Colaborador"].ToString()),
                    Int32.Parse(Cat_Terminos_Pago.Get_Terminos_Pagoes().Rows[0]["Id_Terminos_Pago"].ToString()),
                    Int32.Parse(Cat_Moneda.Get_Monedas().Rows[0]["Id_Moneda"].ToString()),
                    0,
                    c.Dir_Prov_Calle,
                    c.Dir_Prov_NumExt,
                    c.Dir_Prov_NumInt,
                    c.Dir_Prov_EntreCalle1,
                    c.Dir_Prov_EntreCalle2,
                    c.Dir_Prov_Colonia,
                    c.Dir_Prov_Referencia,
                    c.Dir_Prov_Poblacion,
                    c.Dir_Prov_CP,
                    Int32.Parse(dbo_Cat_SIIE.Get_Estados_By_Nombre(c.Dir_Prov_Estado, Aux_Id_Pais).Rows[0]["Id_SIIE_Estado"].ToString()),
                    Aux_Id_Pais,
                    c.Dir_Prov_Delegacion
                );
            }

            MessageBox.Show("Se han cargado exitosamente los datos en el sistema.");
            ((ScrollViewer)this.Parent).Content = new CargaDatos_Main(ref _sesion);
        }

        private void Button_Descartar_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Se ha cancelado la carga del Excel.");
            ((ScrollViewer)this.Parent).Content = new CargaDatos_Main(ref _sesion);
        }
    }
}
